/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   listNode.h                                         :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: Jiang <767280080@qq.com>                   +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2024/04/23 10:37:09 by Jiang             #+#    #+#             */
/*   Updated: 2024/04/25 19:56:41 by TYTY000          ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#ifndef __listNode__
#define __listNode__

#include <cstdint>
template <typename T> struct ListNode;
using Rank = uint16_t;
template <typename T> using ListNodePosi = ListNode<T> *;
// #define ListNodePosi<T> ListNode<T>*

template <typename T> struct ListNode {
  T data;
  ListNodePosi<T> prev;
  ListNodePosi<T> next;
  ListNode() : data(), prev(nullptr), next(nullptr) {}
  ListNode(T e) : data(e), prev(nullptr), next(nullptr) {}
  ListNode(T e, ListNodePosi<T> p, ListNodePosi<T> n)
      : data(e), prev(p), next(n) {}
  ListNodePosi<T> insertAsPrev(const T &e);
  ListNodePosi<T> insertAsNext(const T &e);
  ~ListNode() = default;
};

#include "listNode_imple.h"

#endif // !_listNode_
